# 导入Gradio库
import gradio as gr
import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()
api_key = os.getenv("api_key_ds")
base_url = os.getenv("base_url_ds")
client = OpenAI(api_key=api_key, base_url=base_url)

conversation_history = []

result = []


def chat_with_memory(user_message):
    # 将用户消息添加到对话历史
    conversation_history.append({"role": "user", "content": user_message})
    print(conversation_history)
    # 将对话历史作为上下文传给模型
    response = client.chat.completions.create(
        model=os.getenv("model_ds"),
        messages=conversation_history,
        temperature=0
    )

    # 获取模型的回答
    assistant_response = response.choices[0].message.content

    # 将助手的回答添加到对话历史
    conversation_history.append({"role": "assistant", "content": assistant_response})

    return assistant_response


# 定义用户输入后返回的响应
def respond(message):
    # 返回一个包含用户输入和机器人的回复的列表
    response = chat_with_memory(message)
    temp = [f"我：{message}", f"AI：{response}"]
    result.append(temp)
    return result  # 确保返回格式为 [[用户消息, 机器人回复]]


# 创建Gradio应用
with gr.Blocks() as demo:
    # 添加一个HTML元素，显示标题“聊天机器人”，居中显示
    gr.HTML("<h1 align='center'>欢迎使用聊天机器人</h1>")

    # 创建一个聊天机器人界面，设置不显示标签，设置比例为3，并启用复制按钮
    chatbot = gr.Chatbot(show_label=False, scale=3, show_copy_button=True)

    # 创建一个文本框，用于用户输入消息
    user_input = gr.Textbox(placeholder="在这里输入你的消息...", show_label=False)

    # 绑定用户输入文本框的提交事件，更新聊天机器人界面
    user_input.submit(fn=respond, inputs=user_input, outputs=chatbot)

# 启动Gradio应用
demo.launch()
